Shell & Bash 사용 정리
NOTE
Bash 기본 사용법 정리. 셸 종류·정규표현식·와일드카드, 환경/셸 변수, 입출력 리다이렉션과 파일 디스크립터, alias, 환경변수 설정 파일.
📌 개념
vi 편집기에서 셸 명령 실행
편집 중인 파일을 저장하지 않고도 컴파일·grep 같은 외부 명령을 확인하고 싶을 때 쓴다. 매번 vi를 종료했다가 다시 여는 것보다 훨씬 빠르다.
| 명령 | 설명 |
|---|---|
:!명령어 | vi 종료 없이 외부 명령 1회 실행 |
:sh | vi 종료 후 셸로 이동 (여러 명령 실행 가능) |
exit | 셸 종료 → vi 복귀 |
정규표현식 / 와일드카드
와일드카드는 셸이 명령 실행 전에 파일명을 확장(glob)하는 것이고, 정규표현식은 grep/sed 등 개별 프로그램이 문자열 패턴을 해석하는 것이다. 둘 다 *를 쓰지만 의미가 다르므로 헷갈리지 않아야 한다.
| 기호 | 의미 |
|---|---|
* | (정규식) 0회 이상 반복 / (셸) 모든 파일 |
^ | 줄의 시작 |
$ | 줄의 끝 |
.. | 임의의 2글자 |
~ | 현재 사용자 홈 디렉토리 |
명령 연결
| 형태 | 설명 |
|---|---|
명령1 ; 명령2 | 순차 실행 |
명령1 | 명령2 | 앞 명령의 결과를 다음 명령 입력으로 전달(파이프) |
'명령' | 문자열 그대로 인식 (확장 X) |
파일 디스크립터 (FD)
정상 출력과 오류 출력을 분리해 두는 이유는, 로그를 파일로 저장할 때 정상 결과와 에러 메시지를 따로 걸러내거나(2>/dev/null) 합쳐서(2>&1) 볼 수 있게 하기 위함이다.
| 번호 | 이름 | 설명 |
|---|---|---|
| 0 | stdin | 표준 입력 |
| 1 | stdout | 표준 출력 |
| 2 | stderr | 표준 오류 |
출력 리다이렉션
>>가 필요한 이유는 스크립트를 반복 실행할 때 >를 쓰면 매번 기존 로그가 사라지기 때문이다. 로그 누적이 필요하면 >>, 매번 새로 시작해야 하면 >를 쓴다.
| 형태 | 설명 |
|---|---|
> | 파일 덮어쓰기 |
>> | 파일에 추가 |
환경변수 설정 파일
/etc/*는 시스템의 모든 사용자에게 적용되고 ~/.bash*는 해당 계정에만 적용된다는 스코프 차이를 알아두면, “왜 내 alias가 다른 계정에는 안 보이는지” 같은 문제를 바로 파악할 수 있다.
| 파일 | 역할 |
|---|---|
/etc/profile | 시스템 전체 환경변수 |
~/.bash_profile | 사용자 환경변수 |
/etc/bashrc | 시스템 alias |
~/.bashrc | 사용자 alias |
매개변수
$1 ~ $N: 스크립트 실행 시 전달된 인자
💻 예시
셸 종류 확인 / 변수 목록
cat /etc/shells # 설치된 로그인 셸 목록
env # 환경변수만
set # 셸 변수 + 환경변수Bash 변수
변수명=값 # 띄어쓰기 금지
SOME=test
echo $SOME # 변수 출력
export SOME # 환경변수 등록
unset 변수명 # 변수 해제
export -n 변수명 # 환경변수 → 셸 변수출력 (printf)
printf "형식문자열" 인수
printf "%d + %d = %d\n" 10 10 20리다이렉션
ls 1> ls.out # 정상 출력 저장
ls 2> err.out # 오류 출력 저장
cat > 1.txt # 입력값 저장
echo "hi" > 1.txt
ls . /abc > 1.txt 2>&1 # stdout + stderr 합치기 (&1 = 1번이 가리키는 파일)alias
자주 쓰는 긴 명령을 짧게 줄여 반복 타이핑을 줄이기 위해 쓴다. 다만 alias는 현재 셸 세션에만 유효하므로, 재부팅 후에도 남기려면 반드시 .bashrc 같은 설정 파일에 등록해야 한다(아래 IMPORTANT 참고).
alias lll='ls -al' # 등록
alias # 확인
unalias 별명 # 해제
source ~/.bashrc # 즉시 적용 (로그아웃 없이 반영)
# 영구 저장
cd ~
vi .bashrc # alias lll='ls -al' 추가
source ~/.bashrcIMPORTANT
alias는 기본적으로 재부팅 시 사라진다.
.bashrc에 저장해야 영구 적용된다.
설정 반영
source ~/.bashrc
source ~/.bash_profile